#ifndef ABSTRACT_RESSOURCE_HPP
#define ABSTRACT_RESSOURCE_HPP

#include <iostream>

template<class T>
class AbstractRessource
{
public:
	// Constructor
	AbstractRessource(std::string filename) :
		m_filename(filename),
			m_loaded(false),
			m_ressource(NULL) { }


	// Destructor
		virtual ~AbstractRessource() { }

    /* Filename
		return filename ressource 
	*/
	std::string Filename() { return m_filename; }


	/*  Ressource
		return a pointer to ressource
	*/
	T* Ressource() {  return m_ressource; }

	/*  IsLoaded
		return if ressource is loaded 
	*/
	bool IsLoaded() { return m_loaded; }
    

	// Load Ressource
	virtual void LoadRessource() = 0;

	// Unload Ressource
	virtual void UnloadRessource() = 0;




protected:
	bool m_loaded;
	std::string m_filename;
	T* m_ressource;

private:
  AbstractRessource(const AbstractRessource&);
  AbstractRessource& operator=(const AbstractRessource&);

};
#endif